iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
Software Development

Unity遊戲開發系列 第 4

DAY04 碰撞框Collision

  • 分享至 

  • xImage
  •  

物件之間產生碰撞的偵測,必須兩者都帶有碰撞器,以及其中一方帶有剛體
2D遊戲物件的碰撞器只能使用2D碰撞器,無法將2D遊戲物件與3D碰撞器一起使用,而3D遊戲物件也只能使用3D碰撞器 ,無法使用2D碰撞器。

碰撞器有分成以下幾種:

2D碰撞器

https://ithelp.ithome.com.tw/upload/images/20230920/20162530tgTB1QjWOI.png

  • Box Collider 2D:盒子碰撞器,是一個長方體外形的基本碰撞器,可以用於地板、牆壁或箱子等物件

  • Circle Collider 2D:圓形碰撞器,大小可以均勻等地調節,但不能單獨調節某個坐標軸方向的大小

  • Capsule Collider 2D:膠囊碰撞器,半徑和高度都可以單獨調節,可用在角色或與其他不規則形狀的碰撞結合來使用

  • Polygon Collider 2D:多邊形碰撞器

3D碰撞器

https://ithelp.ithome.com.tw/upload/images/20250227/20162530Sx05cgMItB.png

  • Box Collider:盒子碰撞器,大多用於地板、牆壁等裝飾物件
  • Sphere Collider:球形碰撞器,在設計一些角色施放出來的範圍技能可以用這個來判定
  • Capsule Collider:膠囊碰撞器,半徑和高度都可以單獨調節,可用在角色或與其他不規則形狀的碰撞結合來使用

https://ithelp.ithome.com.tw/upload/images/20250227/20162530byNLdqqeia.png

  • Terrain Collider:地形碰撞器
  • Mesh Collider:網格碰撞器,透過獲取網格對象並在其基礎上建立碰撞,在與復雜網格模型上使用基本碰撞相比,網格碰撞體要更加精細,但會佔用更多的系統資源
  • Wheel Collider:輪碰撞器

碰撞器比較常用的幾個設定

  • Edit Collider:手動調整碰撞框的大小
    https://ithelp.ithome.com.tw/upload/images/20230920/201625300Gr8H2YOzb.png

  • Is Trigger:勾選後物件不會與其他物件有碰撞,而是會變成穿透過去來判斷是否有碰觸

  • Size:直接設定碰撞框的長寬來決定碰撞框的大小

實作

在使用碰撞器時,通常會先設定好遊戲物件的Tag屬性,可以用來去篩選碰撞到帶有標籤的物件才去執行後續的動作
https://ithelp.ithome.com.tw/upload/images/20250227/20162530CXUEq6ScFy.png

或是想要兩個物件之間不發生碰撞可以先設定好Layer,從Unity最上方的選單Edit -> Project Settings -> Physics底下的矩陣,可以決定每個Layer屬性之間是否產生碰撞,像是取消掉human與human之間的選項後,帶有human屬性的物件就不會和另一個有human屬性的物件發生碰撞

https://ithelp.ithome.com.tw/upload/images/20250228/20162530vgM3CfxZE1.png

OnCollision分為以下三類:

  • OnCollisionEnter:當碰撞發生的第一個瞬間開始執行

  • OnCollisionStay:只要維持在碰撞的狀態,就會一直重複執行。

  • OnCollisionExit: 當碰撞的狀態結束時才會開始執行。

OnTrigger也和OnCollision一樣只是條件變成碰觸

用OnCollisionEnter用來判斷是否有碰撞到玩家,像是玩家被投擲物擊中受到傷害

void OnCollisionEnter(Collision coll) {
        if (coll.gameObject.tag == "player") {
           Player_HP -= 10;
           Debug.Log("hit");
         }  
    }

用OnTriggerEnter用來判斷是否有碰觸,像是怪物被玩家揮劍砍中

void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "sword") {
            Monster_HP -= 100;
             Debug.Log("HP -100");
       }

參考資料
https://docs.unity3d.com/Manual/Collider2D.html


上一篇
DAY03 剛體Rigidbody
下一篇
DAY05 Unity 角色移動
系列文
Unity遊戲開發30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言